package br.com.controlador;

import br.com.modelo.*;
import com.t2tierp.pafecf.bd.AcessoBanco;
import java.io.Serializable;
import java.sql.Connection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author gilberto.costa 25/06/2012
 */
@ManagedBean
@ViewScoped
public class ConfiguraControler implements Serializable {

    private Caixa caixa;
    private Configuracao configuracao;

    @PostConstruct
    public void init() {
        caixa = new Caixa();
        caixa.setId(0);//setado para deixar os campos disabled na tela de configuração ao carregar a pagina
        configuracao = new Configuracao();
    }

    /**
     * @return the caixa
     */
    public Caixa getCaixa() {
        return caixa;
    }

    /**
     * @param caixa the caixa to set
     */
    public void setCaixa(Caixa caixa) {
        this.caixa = caixa;
    }

    /**
     * @return the configuracao
     */
    public Configuracao getConfiguracao() {
        return configuracao;
    }

    /**
     * @param configuracao the configuracao to set
     */
    public void setConfiguracao(Configuracao configuracao) {
        this.configuracao = configuracao;
    }

    public void retornaConfiguracao() {
        if (!caixa.getId().toString().equalsIgnoreCase("0")) {
            AcessoBanco acesso = new AcessoBanco();
            caixa = Caixa.retornaCaixaPorId(caixa.getId());
            if (caixa != null) {
                Connection con = acesso.conectar(caixa.getIp());
                if (con != null) {
                    configuracao = Configuracao.retornaConfiguracaoPorCaixa(caixa.getIp());
                } else {
                    configuracao = new Configuracao();
                    caixa.setId(0);
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Caixa (" + caixa.getNome() + ") sem conexão!!", "Mensagem"));
                }
            }
        } else {
            configuracao = new Configuracao();
            caixa.setId(0);
        }
    }

    public void salvar() {
        try {
            if (caixa.getId() != null) {
                Pattern re_filter = Pattern.compile("^\\d{3,3},\\d{3,3},\\d{3,3}$");
                Matcher matcher = re_filter.matcher(configuracao.getCorJanelasInternas());
                Boolean corValidada = matcher.find(0);
                if (!corValidada) {
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "A cor das janelas internas informada está incorreta. Formato correto: xxx,xxx,xxx", "Mensagem"));
                } else {
                    if (!caixa.getId().toString().equalsIgnoreCase("0")) {
                        Impressora imp = Impressora.retornaImpressoraPorid(configuracao.getIdEcfImpressora().getId());
                        configuracao.setIdEcfImpressora(imp);
                        configuracao.setIdEcfCaixa(caixa);
                        Resolucao resol = Resolucao.retornaResolucaoPorId(configuracao.getIdEcfResolucao().getId());
                        configuracao.setIdEcfResolucao(resol);
                        Empresa empr = Empresa.retornEmpresaPorId(configuracao.getIdEcfEmpresa().getId());
                        configuracao.setIdEcfEmpresa(empr);

                        configuracao = configuracao.salvar(caixa.getIp());
                        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Configurações salvas!!", "Mensagem"));
                    } else {
                        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Selecione um caixa!!", "Mensagem"));
                    }
                }
            } else {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Selecione um caixa!!", "Mensagem"));
            }
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro " + e, "Mensagem"));
        }
    }

    public void setorConfPadrao() {
        configuracao.setCorJanelasInternas("236,233,216");
    }
}
